iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 17
1
Modern Web

新時代的網頁框架比較-- 淺談Rails、Django、Phoenix、Laravel系列 第 17

RESTful API設計模式談現代網頁框架

  • 分享至 

  • xImage
  •  

比較不同框架有個最顯而易見的好處
如果大家都有的設計,八成是重要的當代典範
所以每個框架才會紛紛採納
如果你使用的框架沒有這樣的設計
可能就要考慮使用外掛來補強

Rails、Phoenix、Laravel都有考慮到RESTful API設計
唯獨Django沒有
不論我在官方文件或是中文翻譯都沒能找到相關的設計
但是有找到一款外掛Django-REST-framework
使用Django的朋友自然可以考慮要不要安裝使用
以我自己兩年的Rails開發經驗來看
實務上是非常實用且方便的工具

但也或許Django一直遲遲不肯作為官方支援
有自己的設計哲學或道理也說不定(?)
這我目前就不得而知了


再繼續下去之前
先來講講什麼是 RESTful API
REST是縮寫,全稱為「Resource Representational State Transfer」

  • Resource:資源
  • Representational:資料,如JSON,XML,YAML...
  • State:狀態
  • Transfer:傳輸,透過http動詞來實現(get, post, put, delete)

嚴格說來這不是一種技術,而是一種觀念設計思維
在這個觀念出現以前
一個新增post的網址在不同專案可能如下:
/create_post/new_post/post/create/insert_post/gen_post
畢竟每個人的想法不同,
用什麼方式實作「新增」自然因人而異
但有了REST以後
只要知道Model的名稱,一切都是固定的
以Rails為例,如果model是post
當我在router設定為

resources :posts

就會自動產生下面的路由

   Prefix Verb   URI Pattern               Controller#Action
    posts GET    /posts(.:format)          posts#index
          POST   /posts(.:format)          posts#create
 new_post GET    /posts/new(.:format)      posts#new
edit_post GET    /posts/:id/edit(.:format) posts#edit
     post GET    /posts/:id(.:format)      posts#show
          PATCH  /posts/:id(.:format)      posts#update
          PUT    /posts/:id(.:format)      posts#update
          DELETE /posts/:id(.:format)      posts#destroy

可以比較一下在Phoenix的結果

 post_path  GET     /posts             HelloWeb.PostController :index
 post_path  GET     /posts/:id/edit    HelloWeb.PostController :edit
 post_path  GET     /posts/new         HelloWeb.PostController :new
 post_path  GET     /posts/:id         HelloWeb.PostController :show
 post_path  POST    /posts             HelloWeb.PostController :create
 post_path  PATCH   /posts/:id         HelloWeb.PostController :update
            PUT     /posts/:id         HelloWeb.PostController :update
 post_path  DELETE  /posts/:id         HelloWeb.PostController :delete

與Laravel的結果
Laravel routes

基本上是相同的唷!
好啦認真說雖然Laravel的新增是使用store而不是create
至少三個框架新增post的網址都是 POST /posts

跨不同語言不同框架
居然有這麼高程度的相同設計
這大大提高了程式的可維護性與可讀性
接手的人或是團隊的新進人員
不用通靈也不需要找不存在的文件說明
就可以快速掌握專案的router結構
這樣的設計是不是相當便利呢!

不合群的Django君
在RESTful這點上被扣了一分唷

參考資料:
https://github.com/twtrubiks/django-rest-framework-tutorial/tree/master/RESTful-API-Tutorial


上一篇
物件導向與函數導向簡析
下一篇
現代網站框架重要元素整理
系列文
新時代的網頁框架比較-- 淺談Rails、Django、Phoenix、Laravel31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言